<?php

/**
 * 自定义常量
 */
function initUserConstants()
{
    // @tips 获取post  json格式的参数： 后续再思考下怎么和框架底层的Request兼容 vendor/symfony/http-foundation/Request.php:1567
    $params = file_get_contents('php://input');
    $fileGetContentsData = json_decode($params, true);

    /**
     * 当前时间
     */
    if (!defined('TIME_NOW')) {
        define('TIME_NOW', time());
    }

    if (!defined('DATE_NOW')) {
        define('DATE_NOW', formatLongDate());
    }

    /**
     * 当前页
     */
    if (!defined('CURRENT_PAGE')) {
        if (!empty($fileGetContentsData) && isset($fileGetContentsData['page'])) {
            $_REQUEST['page'] = $fileGetContentsData['page'];
        }

        define('CURRENT_PAGE', intval(max($_REQUEST['page'] ?? 1, 1)));
        unset($_REQUEST['page'], $_GET['page'], $_POST['page']);
    }

    /**
     * 默认分页大小:
     * 最小10, 最大 1000
     */
    if (!defined('PAGE_SIZE')) {
        if (!empty($fileGetContentsData) && isset($fileGetContentsData['pageSize'])) {
            $_REQUEST['pageSize'] = $fileGetContentsData['pageSize'];
        }

        // 边界处理 上限：200，下限：1
        define('PAGE_SIZE', intval(min(max($_REQUEST['pageSize'] ?? 1, 10), 200)));
        unset($_REQUEST['pageSize'], $_GET['pageSize'], $_POST['pageSize']);
    }

    define(
        'NEO_LOGGER_ID', getForgedUniCode()
    );

    /**
     * 时间戳
     */
    define('ONE_MINUTE', 60);           // 一分钟的秒数
    define('SECONDS_HOUR', 3600);       // 一小时的秒数
    define('SECONDS_DAY', 86400);       // 一天的秒数
    define('SECONDS_WEEK', 604800);     // 一周的秒数
    define('SECONDS_MONTH', 2592000);   // 一月的秒数(30天)，28,29，31天的特殊场景如有需要，可以拿天的秒数乘 -1month
    define('SECONDS_YEAR', 31536000);   // 一年的秒数(365天)，366天等其他场景，可以拿天的秒数乘或者当前时间 -1year

    /**
     * 用户
     */
    define('USER_REGISTER_SOURCE_APP', 1);    // APP用户

    define('USER_REGISTER_SOURCE_APP_KEY', 'app'); // APP用户key

    /**
     * 验证码缓存失效
     */
    define('SMS_CODE_CACHE_EXPIRED_MINUTE', 5);   // 5分钟


    /**
     * 性别
     */
    define('GENDER_UNKNOWN', 0);   // 未知
    define('GENDER_MALE', 1);      // 男性
    define('GENDER_FEMALE', 2);    // 女性

    // 定义Redis常默认缓存时间: 一周
    define('REDIS_DEFAULT_TIMEOUT', SECONDS_WEEK);

    //  -------------------- 以下是业务类型的常量 --------------------
    /**
     * `make_status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '铸造状态：0-未铸造、1-铸造中、2-已铸造、3-铸造失败',
     */
    define('MAKE_STATUS_NO_CAST', 0);   // 未铸造
    define('MAKE_STATUS_CASTING', 1);   // 铸造中
    define('MAKE_STATUS_CAST', 2);      // 已铸造
    define('MAKE_STATUS_CAST_FAIL', 3); // 铸造失败
}
